package xyz.erupt.annotation.sub_field.sub_edit;

import xyz.erupt.annotation.KV;
import xyz.erupt.annotation.config.Comment;
import xyz.erupt.annotation.config.ToMap;
import xyz.erupt.annotation.sub_erupt.Tpl;

import java.beans.Transient;

/**
 * 配置ViewType.LINK或者ViewType.LINK_DIALOG时跳转链接的各项扩展信息
 *
 * @author Ajian
 * @date 2022-10-27 19:01
 */
public @interface LinkType {
    @Comment("link配置是否起作用，true：按此配置进行处理，false：按默认链接方式处理")
    boolean action() default false;

    @Comment("配置跳转目标")
    LinkTarget target() default LinkTarget.ERUPT_DETAIL_VIEW;

    @Comment("当target为ERUPT_XXX时，指明Erupt对象")
    Class<?> eruptClass() default void.class;

    @Comment("target为tpl时可用，指明配置的tpl菜单值，如game-detail、user-detail，其参数通过primaryKeyName、params等进行传递，支持动态参数${xxx}")
    String tplMenuValue() default "";

    @Comment("tpl模板弹出层宽度")
    String tplWidth() default "";

    @Comment("target为MENU时可用，该值为菜单的code唯一值，对应e_upms_menu表的code字段")
    String menuCode() default "";

    @Comment("跳转之后的数据查询的字段名(注意：因为采用HQL，这里字段名实际上是属性名)，如要跳转到User对象，通过id(主键)查询，则配置primaryKeyName=“id”")
    String primaryKeyName() default "";

    @Comment("primaryKeyName的值的来源，若primaryValSource配置的是一个非@EruptField字段，则需要在afterFetch中进行赋值")
    String primaryValSource() default "";


    @ToMap(key = "key")
    @Comment("自定义扩展参数，其value的值支持${xxx}动态参数形式赋值，xxx为选中行中的数据列名")
    KV[] params() default {};

    String script() default "";
    String scriptPath() default "";

    enum LinkTarget {
        @Comment("跳转内容通过erupt的表格渲染")
        ERUPT_TABLE_VIEW,
        @Comment("跳转内容通过erupt的详情页渲染")
        ERUPT_DETAIL_VIEW,
        @Comment("跳转内容通过自定义模板渲染")
        TPL,
        @Comment("跳转内容通过菜单渲染，配合menuName指明菜单名")
        MENU,
        @Comment("点击之后，执行一段自定义的JS")
        SCRIPT
    }

}
